# -*- coding: utf-8 -*-
from odoo import models, fields, api
from odoo.exceptions import ValidationError


class WorkCenter(models.Model):
    """工作中心主数据 - 基于mrp.workcenter简化版"""
    _name = 'production.workcenter'
    _description = '工作中心主数据'
    _rec_name = 'name'
    _order = 'sequence, name'
    
    # 基本信息
    name = fields.Char(
        string='工作中心名称',
        required=True,
        help='工作中心的名称'
    )
    
    code = fields.Char(
        string='工作中心编号',
        required=True,
        help='工作中心的唯一编号'
    )
    
    company_id = fields.Many2one(
        'res.company',
        string='公司',
        default=lambda self: self.env.company,
        help='所属公司'
    )
    
    active = fields.Boolean(
        string='激活',
        default=True,
        help='是否激活此工作中心'
    )
    
    sequence = fields.Integer(
        string='顺序',
        default=10,
        help='显示顺序'
    )
    
    # 位置信息
    department_id = fields.Many2one(
        'hr.department',
        string='部门',
        help='所属部门'
    )
    
    location = fields.Char(
        string='位置',
        help='工作中心所在位置'
    )
    
    # 工作时间
    working_hours_id = fields.Many2one(
        'resource.calendar',
        string='工作时间',
        help='工作中心的工作时间日历'
    )
    
    # 产能信息
    capacity = fields.Float(
        string='产能',
        default=1.0,
        help='工作中心的生产能力（如：每小时可处理的数量）'
    )
    
    time_efficiency = fields.Float(
        string='时间效率(%)',
        default=100.0,
        help='工作中心的时间效率百分比'
    )
    
    oee_target = fields.Float(
        string='OEE目标(%)',
        default=90.0,
        help='设备综合效率目标值'
    )
    
    # 成本信息
    costs_hour = fields.Float(
        string='小时成本',
        default=0.0,
        help='每小时运行成本'
    )
    
    costs_hour_account_id = fields.Many2one(
        'account.account',
        string='成本科目',
        help='小时成本对应的会计科目',
        domain="[('deprecated', '=', False)]"
    )
    
    # 技术信息
    equipment_ids = fields.One2many(
        'production.equipment',
        'workcenter_id',
        string='设备列表',
        help='该工作中心的设备'
    )
    
    equipment_count = fields.Integer(
        string='设备数量',
        compute='_compute_equipment_count'
    )
    
    # 工作类型
    workcenter_type = fields.Selection([
        ('manual', '手工'),
        ('semi_auto', '半自动'),
        ('auto', '全自动'),
    ], string='工作中心类型', default='manual', help='工作中心的自动化程度')
    
    # 状态信息
    status = fields.Selection([
        ('available', '可用'),
        ('busy', '繁忙'),
        ('maintenance', '维护中'),
        ('stopped', '停工'),
    ], string='状态', default='available', help='工作中心当前状态')
    
    # 备注
    note = fields.Text(
        string='备注',
        help='其他说明信息'
    )
    
    # 统计信息
    color = fields.Integer(
        string='颜色',
        default=0,
        help='用于看板视图的颜色'
    )
    
    # 唯一性约束
    _sql_constraints = [
        ('code_company_unique',
         'UNIQUE(code, company_id)',
         '工作中心编号在同一公司内必须唯一！')
    ]
    
    @api.depends('equipment_ids')
    def _compute_equipment_count(self):
        """计算设备数量"""
        for record in self:
            record.equipment_count = len(record.equipment_ids)
    
    def name_get(self):
        """显示名称格式"""
        result = []
        for record in self:
            name = f"[{record.code}] {record.name}"
            result.append((record.id, name))
        return result
    
    def action_view_equipment(self):
        """查看工作中心的设备"""
        self.ensure_one()
        return {
            'name': f'{self.name} - 设备列表',
            'type': 'ir.actions.act_window',
            'res_model': 'production.equipment',
            'view_mode': 'list,form',
            'domain': [('workcenter_id', '=', self.id)],
            'context': {'default_workcenter_id': self.id},
        }

